题目地址 (opens new window)

  • 😄 第一次练习 2020年3月13日 终于有一个题做一次就会了 🐂🍻
  • 💩 第二次练习

# 快慢指针

解题代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var getKthFromEnd = function(head, k) {

    let slow = head;
    let fast = head;
    // 快慢指针
    for (let i = 0; i < k; i ++) {
        fast = fast.next;
    }
    while (fast != null) {
        fast = fast.next;
        slow = slow.next;
    }
    return slow;
};

进阶代码,可以使用变量 t ,减少一次 for 循环

/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var getKthFromEnd = function(head, k) {

    let slow = head, fast = head, t = 0;
    while (fast != null) {
        if (t++ >= k) 
            slow = slow.next;
        fast = fast.next;
    }
    return slow;
};

# 易错点

  • 进阶代码中,注意变量 t>= k
  • 是否需要考虑k,大于链表长度的情况。如果大于链表长度,那么就直接返回整个链表
最后编辑时间: 7/14/2020, 9:21:47 AM